import axios from "axios";
// import router from "../router/index";
import { message } from "antd";
import qs from "qs";

import NProgress from "nprogress"; // 引入nprogress插件
import "nprogress/nprogress.css"; // 这个nprogress样式必须引入

export function request(config) {
  // 1.创建axios实例
  const instance = axios.create({
    // baseURL: "http://192.168.2.41:8001",
    baseURL: "http://101.132.195.158:80",
    withCredentials: true,
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    timeout: 10000,
  });

  //   let loading;
  //   let loadingCount = 0;
  // 2.axios拦截器
  instance.interceptors.request.use(
    (config) => {
      if (config.method === "get") {
        //如果是get请求，且params是数组类型如arr=[1,2]，则转换成arr=1&arr=2
        config.paramsSerializer = function (params) {
          return qs.stringify(params, { arrayFormat: "repeat" });
        };
      }
      NProgress.start(); // 设置加载进度条(开始..)
      //   loadingCount++;
      //   loading = Loading.service({
      //     target: "body",
      //     background: "transparent",
      //     text: "载入中",
      //   });

      config.headers.Authorization = window.sessionStorage.getItem("token");

      return config;
    },
    (err) => {
      return Promise.reject(err);
    }
  );

  instance.interceptors.response.use(
    (config) => {
      if (config.data && config.data.code === 401) {
        message.error("登录信息已过期,请重新登录!");
        // 清楚sessionStorage数据
        window.sessionStorage.clear();
        // 删除vuex中的数据，让当前页面刷新
        window.location.reload();
        // router.push("/login");
      }
      NProgress.done(); // 设置加载进度条(结束..)
      //   loadingCount--;
      //   if (loadingCount <= 0) {
      //     loading.close();
      //   } else {
      //   }

      return config;
    },
    (err) => {
      // Message.error('连接失败,请检查网络!!!')
      NProgress.done(); // 设置加载进度条(结束..)
      //   loadingCount--;
      //   if (loadingCount <= 0) {
      //     loading.close();
      //   } else {
      //   }

      return Promise.reject(err);
    }
  );

  // 3.发送真正的网络请求
  return instance(config);
}
